Computer Graphics

Part III - More Transformations and Programs

Hearn and Baker – Chapter 5

Program to Translate a Polygon

 

 

import java.awt.*;

import java.awt.event.*;

import java.nio.IntBuffer;

 

import net.java.games.jogl.*;

import net.java.games.jogl.util.*;

 

public class PolyTrans

{

 

   public static void main(String[] args)

  {

    Frame frame = new Frame("Translate 2D");

    GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());

    canvas.addGLEventListener(new Renderer());

    frame.add(canvas);

    frame.setSize(500, 500);

   

    frame.addWindowListener(new WindowAdapter()

    {

      public void windowClosing(WindowEvent e)

      {

       

        System.exit(0);

      }

    });

    frame.show();

    canvas.requestFocus();

   

  }

 

 

 

  static class Renderer implements GLEventListener, KeyListener

  {

    

   public class cPt2D {

      public float x, y;

     

      cPt2D(float xcoord, float ycoord){

            x= xcoord;

            y= ycoord;

     }

           

  };

  

   public void translatePolygon (GL gl, cPt2D [] verts, int nVerts, float tx, float ty)

   {

      int k;

 

      for (k = 0; k < nVerts; k++) {

         verts [k].x = verts [k].x + tx;

         verts [k].y = verts [k].y + ty;

      }

      gl.glBegin (GL.GL_POLYGON);

         for (k = 0; k < nVerts; k++)

            gl.glVertex2f (verts[k].x, verts[k].y);

      gl.glEnd ( );

          

   }      

   

  

   

    public void display(GLDrawable gLDrawable)

    {

     final GL gl = gLDrawable.getGL();

     final GLU glu = gLDrawable.getGLU();

    

    

     float [][] CLUT ={{1.0f,0.0f,0.0f},{1.0f,0.5f,0.0f},{1.0f,1.0f,0.0f},

            {0.0f,1.0f,0.0f},{0.0f,0.0f,1.0f},{1.0f,0.0f,1.0f},

            {0.5f,0.0f,0.5f}, {1.0f,0.0f,0.5f}};

           

      gl.glClear (GL.GL_COLOR_BUFFER_BIT);  // Set display window to color.

        gl.glMatrixMode (GL.GL_MODELVIEW);

      gl.glLoadIdentity();

           

          

      cPt2D [] polygon = new cPt2D[4];

     

      polygon[0] = new cPt2D(-50.0f,-50.0f);

      polygon[1] = new cPt2D(50.0f,-50.0f);

      polygon[2] = new cPt2D(50.0f,50.0f);

      polygon[3] = new cPt2D(-50.0f,50.0f);

              

            gl.glColor3fv (CLUT[0]);           

            translatePolygon(gl, polygon, 4, 0, 0);

            gl.glColor3fv (CLUT[2]); 

            translatePolygon(gl, polygon, 4, 100, -300);

            gl.glColor3fv (CLUT[4]); 

            translatePolygon(gl, polygon, 4, 200, 400);

            gl.glColor3fv (CLUT[3]); 

            translatePolygon(gl, polygon, 4, -400, -450);        

            gl.glColor3fv (CLUT[5]); 

            translatePolygon(gl, polygon, 4, -300, 450);  

     }

   

   public void init(GLDrawable gLDrawable)

    {

      final GL gl = gLDrawable.getGL();

      final GLU glu = gLDrawable.getGLU();

     

      gl.glMatrixMode (GL.GL_PROJECTION); 

      gl.glClearColor (0.0f, 0.0f, 0.0f, 0.0f);   //set background to white

      glu.gluOrtho2D (-500.0, 500.0, -500, 500.0);  // define drawing area

      gLDrawable.addKeyListener(this);

    }

    

     public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)

    {

    }

   

       public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)

    {

     

    }

 

   

    public void keyPressed(KeyEvent e)

    {

      if (e.getKeyCode() == KeyEvent.VK_ESCAPE)

     

        System.exit(0);

    }

      

    public void keyReleased(KeyEvent e) {}

   

    public void keyTyped(KeyEvent e) {}

      }

 

 

}

 

 

Animating a Polygon Translation

 

 

 

import java.awt.*;

import java.awt.event.*;

import java.nio.IntBuffer;

 

import net.java.games.jogl.*;

import net.java.games.jogl.util.*;

 

public class PolyTransAnim

{

 

  static Animator animator = null;

 

  public static void main(String[] args)

  {

    Frame frame = new Frame("Translate 2D Animate ");

    GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());

    canvas.addGLEventListener(new Renderer());

    frame.add(canvas);

    frame.setSize(500, 500);

    animator = new Animator(canvas);

    frame.addWindowListener(new WindowAdapter()

    {

      public void windowClosing(WindowEvent e)

      {

        animator.stop();

        System.exit(0);

      }

    });

    frame.show();

    animator.start();

    canvas.requestFocus();

   

  }

 

 

 

  static class Renderer implements GLEventListener, KeyListener

  {

    

   public class cPt2D {

      public float x, y;

     

      cPt2D(float xcoord, float ycoord){

            x= xcoord;

            y= ycoord;

     }

           

  };

  

   public void translatePolygon (GL gl, cPt2D [] verts, int nVerts, float tx, float ty)

   {

      int k;

 

      for (k = 0; k < nVerts; k++) {

         verts [k].x = verts [k].x + tx;

         verts [k].y = verts [k].y + ty;

      }

      gl.glBegin (GL.GL_POLYGON);

         for (k = 0; k < nVerts; k++)

            gl.glVertex2f (verts[k].x, verts[k].y);

      gl.glEnd ( );

          

   }      

   

    float tx = -500.0f, ty=0.0f;

    float txlast = -500.0f, txdiff=0.0f;

   

    public void display(GLDrawable gLDrawable)

    {

     final GL gl = gLDrawable.getGL();

     final GLU glu = gLDrawable.getGLU();

    

    

     float [][] CLUT ={{1.0f,0.0f,0.0f},{1.0f,0.5f,0.0f},{1.0f,1.0f,0.0f},

            {0.0f,1.0f,0.0f},{0.0f,0.0f,1.0f},{1.0f,0.0f,1.0f},

            {0.5f,0.0f,0.5f}, {1.0f,0.0f,0.5f}};

           

      gl.glClear (GL.GL_COLOR_BUFFER_BIT);  // Set display window to color.

        gl.glMatrixMode (GL.GL_MODELVIEW);

      gl.glLoadIdentity();

           

      cPt2D [] polygon = new cPt2D[4];

     

      polygon[0] = new cPt2D(-50.0f,-50.0f);

      polygon[1] = new cPt2D(50.0f,-50.0f);

      polygon[2] = new cPt2D(50.0f,50.0f);

      polygon[3] = new cPt2D(-50.0f,50.0f);

              

                       

            translatePolygon(gl, polygon, 4, tx, ty);

                       

            txlast = tx;

       

            tx+=2;

       

            if ((tx <= 500.0f) && (txdiff >= 0.00f ))

                  {tx+=2; gl.glColor3fv(CLUT[2]); }

             else

                  {tx-=2; gl.glColor3fv(CLUT[4]); }

           

            if (tx > -500.0f) tx-=2;

       

            txdiff = tx - txlast;  

           

     }

   

   public void init(GLDrawable gLDrawable)

    {

      final GL gl = gLDrawable.getGL();

      final GLU glu = gLDrawable.getGLU();

     

      gl.glMatrixMode (GL.GL_PROJECTION); 

      gl.glClearColor (0.0f, 0.0f, 0.0f, 0.0f);   //set background to white

      glu.gluOrtho2D (-500.0, 500.0, -500, 500.0);  // define drawing area

      gLDrawable.addKeyListener(this);

    }

   

     public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)

    {

    }

   

       public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)

    {

     

    }

 

   

    public void keyPressed(KeyEvent e)

    {

      if (e.getKeyCode() == KeyEvent.VK_ESCAPE)

      animator.stop();

        System.exit(0);

    }

      

    public void keyReleased(KeyEvent e) {}

   

    public void keyTyped(KeyEvent e) {}

      }

 

 

}

 

 

 

Program to Scale a Polygon

 

 

import java.awt.*;

import java.awt.event.*;

import java.nio.IntBuffer;

 

import net.java.games.jogl.*;

import net.java.games.jogl.util.*;

 

public class PolyScale

{

 

   public static void main(String[] args)

  {

    Frame frame = new Frame("Scale 2D");

    GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());

    canvas.addGLEventListener(new Renderer());

    frame.add(canvas);

    frame.setSize(500, 500);

   

    frame.addWindowListener(new WindowAdapter()

    {

      public void windowClosing(WindowEvent e)

      {

       

        System.exit(0);

      }

    });

    frame.show();

    canvas.requestFocus();

   

  }

 

 

 

  static class Renderer implements GLEventListener, KeyListener

  {

    

   public class cPt2D {

      public float x, y;

     

      cPt2D(float xcoord, float ycoord){

            x= xcoord;

            y= ycoord;

     }

    

     cPt2D ( ){

     x = 0.0f;

     y = 0.0f;

      }

           

  }

  

   public void translatePolygon (GL gl, cPt2D [] verts, int nVerts, float tx, float ty)

   {

             

        for (int k = 0; k < nVerts; k++) {

         verts[k].x = verts [k].x + tx;

         verts[k].y = verts [k].y + ty;

      }

               

   }       

    

    public void scalePolygon (GL gl, cPt2D [] verts, cPt2D fixedPt, int nVerts, float sx, float sy)

   {

      cPt2D [] vertsNew = new cPt2D[4];

     

      for (int k = 0; k < nVerts; k++)

            vertsNew[k] = new cPt2D( );

     

     

      //System.out.println (" "+ fixedPt.x +    " "+ fixedPt.y);

      for (int k = 0; k < nVerts; k++) {

         vertsNew[k].x = verts[k].x * sx + fixedPt.x * (1 - sx);

         vertsNew[k].y = verts[k].y * sy + fixedPt.y * (1 - sy);

      }

      gl.glBegin(GL.GL_POLYGON);

         for (int k = 0; k < nVerts; k++)

            gl.glVertex2f(vertsNew[k].x, vertsNew[k].y);

      gl.glEnd ( );

   }

  

   

    public void display(GLDrawable gLDrawable)

    {

     final GL gl = gLDrawable.getGL();

     final GLU glu = gLDrawable.getGLU();

    

    

     float [][] CLUT ={{1.0f,0.0f,0.0f},{1.0f,0.5f,0.0f},{1.0f,1.0f,0.0f},

            {0.0f,1.0f,0.0f},{0.0f,0.0f,1.0f},{1.0f,0.0f,1.0f},

            {0.5f,0.0f,0.5f}, {1.0f,0.0f,0.5f}};

           

      gl.glClear (GL.GL_COLOR_BUFFER_BIT);  // Set display window to color.

        gl.glMatrixMode (GL.GL_MODELVIEW);

      gl.glLoadIdentity();

           

          

      cPt2D [] polygon = new cPt2D[4];

     

     

      polygon[0] = new cPt2D(-50.0f,-50.0f);

      polygon[1] = new cPt2D(50.0f,-50.0f);

      polygon[2] = new cPt2D(50.0f,50.0f);

      polygon[3] = new cPt2D(-50.0f,50.0f);

     

      cPt2D fixedPt = new cPt2D(polygon[0].x,polygon[0].y);

     

     //  System.out.println (" "+ fixedPt.x +   " "+ fixedPt.y);

           

            gl.glColor3fv (CLUT[0]);           

            scalePolygon(gl, polygon, fixedPt, 4, 3.0f, 0.5f);

     

            gl.glColor3fv (CLUT[2]); 

            translatePolygon(gl, polygon,  4, -200, -400);

            scalePolygon(gl, polygon, fixedPt, 4, 2.0f, 1.0f);

           

            gl.glColor3fv (CLUT[4]); 

            translatePolygon(gl, polygon,  4, 600, 200);

            scalePolygon(gl, polygon, fixedPt, 4, 1.0f, 2.0f);

           

            gl.glColor3fv (CLUT[7]); 

            translatePolygon(gl, polygon,  4, -500, 250);        

            scalePolygon(gl, polygon, fixedPt, 4, 3.0f, 3.0f);  

     }

   

   public void init(GLDrawable gLDrawable)

    {

      final GL gl = gLDrawable.getGL();

      final GLU glu = gLDrawable.getGLU();

     

      gl.glMatrixMode (GL.GL_PROJECTION); 

      gl.glClearColor (0.0f, 0.0f, 0.0f, 0.0f);   //set background to white

      glu.gluOrtho2D (-500.0, 500.0, -500, 500.0);  // define drawing area

      gLDrawable.addKeyListener(this);

    }

   

     public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)

    {

    }

   

       public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)

    {

     

    }

 

   

    public void keyPressed(KeyEvent e)

    {

      if (e.getKeyCode() == KeyEvent.VK_ESCAPE)

     

        System.exit(0);

    }

      

    public void keyReleased(KeyEvent e) {}

   

    public void keyTyped(KeyEvent e) {}

      }

 

 

}

 

 

Program to Rotate a Polygon

 

 

import java.awt.*;

import java.awt.event.*;

import java.nio.IntBuffer;

 

import net.java.games.jogl.*;

import net.java.games.jogl.util.*;

 

public class PolyRot

{

 

   public static void main(String[] args)

  {

    Frame frame = new Frame("Rotation 2D");

    GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());

    canvas.addGLEventListener(new Renderer());

    frame.add(canvas);

    frame.setSize(500, 500);

   

    frame.addWindowListener(new WindowAdapter()

    {

      public void windowClosing(WindowEvent e)

      {

       

        System.exit(0);

      }

    });

    frame.show();

    canvas.requestFocus();

   

  }

 

 

 

  static class Renderer implements GLEventListener, KeyListener

  {

    

   public class cPt2D {

      public float x, y;

     

      cPt2D(float xcoord, float ycoord){

            x= xcoord;

            y= ycoord;

     }

    

     cPt2D( ){

     x = 0.0f;

     y = 0.0f;

      }

           

  };

  

      

    void rotatePolygon (GL gl, cPt2D [] verts, cPt2D pivPt, int nVerts, 

                         float theta)

   {

      cPt2D [] vertsRot= new cPt2D[4];

      double deg_to_rad;

     

      deg_to_rad = Math.PI / 180.0;

     

      for (int k = 0; k < nVerts; k++)

            vertsRot[k] = new cPt2D( );

 

      for (int k = 0; k < nVerts; k++) {

         vertsRot[k].x = pivPt.x + (verts[k].x - pivPt.x) * (float)Math.cos(theta*deg_to_rad)

                        - (verts[k].y - pivPt.y) * (float)Math.sin(theta*deg_to_rad);

         vertsRot[k].y = pivPt.y + (verts [k].x - pivPt.x) * (float)Math.sin(theta*deg_to_rad)

                        + (verts[k].y - pivPt.y) * (float)Math.cos(theta*deg_to_rad);

 

      }

     

      gl.glBegin(GL.GL_POLYGON);

         for (int k = 0; k < nVerts; k++)

            gl.glVertex2f (vertsRot[k].x, vertsRot[k].y);

      gl.glEnd ( );

   }

 

  

   

    public void display(GLDrawable gLDrawable)

    {

     final GL gl = gLDrawable.getGL();

     final GLU glu = gLDrawable.getGLU();

    

    

     float [][] CLUT ={{1.0f,0.0f,0.0f},{1.0f,0.5f,0.0f},{1.0f,1.0f,0.0f},

            {0.0f,1.0f,0.0f},{0.0f,0.0f,1.0f},{1.0f,0.0f,1.0f},

            {0.5f,0.0f,0.5f}, {1.0f,0.0f,0.5f}};

           

      gl.glClear (GL.GL_COLOR_BUFFER_BIT);  // Set display window to color.

        gl.glMatrixMode (GL.GL_MODELVIEW);

      gl.glLoadIdentity();

           

          

      cPt2D [] polygon = new cPt2D[4];

      float angle=0.0f;

      int i =0;

      

      polygon[0] = new cPt2D(-10.0f,-10.0f);

      polygon[1] = new cPt2D(400.0f,-10.0f);

      polygon[2] = new cPt2D(400.0f,10.0f);

      polygon[3] = new cPt2D(-10.0f,10.0f);

     

      cPt2D fixedPt = new cPt2D(polygon[0].x,polygon[0].y);

              

         while(angle < 360){

            gl.glColor3fv (CLUT[i%8]);    

            rotatePolygon(gl, polygon, fixedPt, 4, angle); 

            i++;

            angle+=30;

      }

     }

   

   public void init(GLDrawable gLDrawable)

    {

      final GL gl = gLDrawable.getGL();

      final GLU glu = gLDrawable.getGLU();

     

      gl.glMatrixMode (GL.GL_PROJECTION); 

      gl.glClearColor (0.0f, 0.0f, 0.0f, 0.0f);   //set background to white

      glu.gluOrtho2D (-500.0, 500.0, -500, 500.0);  // define drawing area

      gLDrawable.addKeyListener(this);

    }

   

     public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)

    {

    }

   

       public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)

    {

     

    }

 

   

    public void keyPressed(KeyEvent e)

    {

      if (e.getKeyCode() == KeyEvent.VK_ESCAPE)

     

        System.exit(0);

    }

      

    public void keyReleased(KeyEvent e) {}

   

    public void keyTyped(KeyEvent e) {}

      }

 

 

}

 

 

Polygon Rotation Animation – Clock

 

 

import java.awt.*;

import java.awt.event.*;

import java.nio.IntBuffer;

 

import net.java.games.jogl.*;

import net.java.games.jogl.util.*;

 

public class Clock

{

  static Animator animator = null;

   public static void main(String[] args)

  {

    Frame frame = new Frame("Clock");

    GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());

    canvas.addGLEventListener(new Renderer());

    frame.add(canvas);

    frame.setSize(500, 500);

    animator = new Animator(canvas);

    frame.addWindowListener(new WindowAdapter()

    {

      public void windowClosing(WindowEvent e)

      {

        animator.stop();

        System.exit(0);

      }

    });

    frame.show();

    animator.start();

    canvas.requestFocus();

   

  }

 

 

 

  static class Renderer implements GLEventListener, KeyListener

  {

    

   public class cPt2D {

      public float x, y;

     

      cPt2D(float xcoord, float ycoord){

            x= xcoord;

            y= ycoord;

     }

    

     cPt2D( ){

     x = 0.0f;

     y = 0.0f;

      }

           

  };

  

      

    void rotatePolygon (GL gl, cPt2D [] verts, cPt2D pivPt, int nVerts, 

                         float theta)

   {

      cPt2D [] vertsRot= new cPt2D[4];

      double deg_to_rad;

     

      deg_to_rad = Math.PI / 180.0;

     

      for (int k = 0; k < nVerts; k++)

            vertsRot[k] = new cPt2D( );

 

      for (int k = 0; k < nVerts; k++) {

         vertsRot[k].x = pivPt.x + (verts[k].x - pivPt.x) * (float)Math.cos(theta*deg_to_rad)

                        - (verts[k].y - pivPt.y) * (float)Math.sin(theta*deg_to_rad);

         vertsRot[k].y = pivPt.y + (verts [k].x - pivPt.x) * (float)Math.sin(theta*deg_to_rad)

                        + (verts[k].y - pivPt.y) * (float)Math.cos(theta*deg_to_rad);

 

      }

     

      gl.glBegin(GL.GL_POLYGON);

         for (int k = 0; k < nVerts; k++)

            gl.glVertex2f (vertsRot[k].x, vertsRot[k].y);

      gl.glEnd ( );

   }

  

   void buildFace (GL gl, GLUT glut){

       double angle=0.0f, r=450, ang;

       int x, y, i=0;

       String [] num = {"3", "2", "1", "12", "11", "10","9", "8", "7","6", "5", "4"};

       gl.glColor3f(1.0f,1.0f,1.0f);

       

       while(angle < 360){

            ang = angle*Math.PI/180.0;

           x = (int)( r*Math.cos(ang));

           y = (int)(r*Math.sin(ang));

           

             gl.glRasterPos2i(x,y); // set position

         glut.glutBitmapString(gl, 5, num[i]); 

             angle+=30;

             i++;

      }

   

   } 

 

   float angle=90.0f, sec_ang=270.0f; int i =0;

   

    public void display(GLDrawable gLDrawable)

    {

     final GL gl = gLDrawable.getGL();

     final GLU glu = gLDrawable.getGLU();

      final GLUT glut = new GLUT();

    

     float [][] CLUT ={{1.0f,0.0f,0.0f},{1.0f,0.5f,0.0f},{1.0f,1.0f,0.0f},

            {0.0f,1.0f,0.0f},{0.0f,0.0f,1.0f},{1.0f,0.0f,1.0f},

            {0.5f,0.0f,0.5f}, {1.0f,0.0f,0.5f}};

           

      gl.glClear (GL.GL_COLOR_BUFFER_BIT);  // Set display window to color.

        gl.glMatrixMode (GL.GL_MODELVIEW);

      gl.glLoadIdentity();

    

          

      cPt2D [] polygon1 = new cPt2D[4];

      cPt2D [] polygon2 = new cPt2D[4];

          

      polygon1[0] = new cPt2D(-10.0f,-10.0f);

      polygon1[1] = new cPt2D(420.0f,-10.0f);

      polygon1[2] = new cPt2D(380.0f,10.0f);

      polygon1[3] = new cPt2D(-10.0f,10.0f);

     

      polygon2[0] = new cPt2D(-10.0f,-10.0f);

      polygon2[1] = new cPt2D(250.0f,-10.0f);

      polygon2[2] = new cPt2D(180.0f,10.0f);

      polygon2[3] = new cPt2D(-10.0f,10.0f);

     

      cPt2D fixedPt = new cPt2D(0.0f,0.0f);

      

       buildFace(gl, glut);

      

       int ang;

              

            ang = (int)(angle/45.0f);

            gl.glColor3fv (CLUT[2]);    

            rotatePolygon(gl, polygon1, fixedPt, 4, angle);

         

            gl.glColor3fv (CLUT[5]);

        rotatePolygon(gl, polygon2, fixedPt, 4, 82.5f+ angle/12.0f);

     

            angle-=0.05f;

     }

   

   public void init(GLDrawable gLDrawable)

    {

      final GL gl = gLDrawable.getGL();

      final GLU glu = gLDrawable.getGLU();

      

      gl.glMatrixMode (GL.GL_PROJECTION); 

      gl.glClearColor (0.0f, 0.0f, 0.0f, 0.0f);   //set background to white

      glu.gluOrtho2D (-500.0, 500.0, -500, 500.0);  // define drawing area

      gLDrawable.addKeyListener(this);

    }

   

     public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)

    {

    }

   

       public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)

    {

     

    }

 

   

    public void keyPressed(KeyEvent e)

    {

      if (e.getKeyCode() == KeyEvent.VK_ESCAPE)

      animator.stop();

        System.exit(0);

    }

      

    public void keyReleased(KeyEvent e) {}

   

    public void keyTyped(KeyEvent e) {}

      }

 

 

}

 

 

OpenGL Geometric Transformations

 

 

import java.awt.*;

import java.awt.event.*;

import java.nio.IntBuffer;

 

import net.java.games.jogl.*;

import net.java.games.jogl.util.*;

 

public class GL2Dprims

{

 

   public static void main(String[] args)

  {

    Frame frame = new Frame("GL 2d Primitive Operations");

    GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());

    canvas.addGLEventListener(new Renderer());

    frame.add(canvas);

    frame.setSize(500, 500);

   

    frame.addWindowListener(new WindowAdapter()

    {

      public void windowClosing(WindowEvent e)

      {

       

        System.exit(0);

      }

    });

    frame.show();

    canvas.requestFocus();

   

  }

 

 

 

  static class Renderer implements GLEventListener, KeyListener

  {

    

     

    public void display(GLDrawable gLDrawable)

    {

     final GL gl = gLDrawable.getGL();

     final GLU glu = gLDrawable.getGLU();

    

      gl.glClear (GL.GL_COLOR_BUFFER_BIT);  // Set display window to color.

        gl.glMatrixMode (GL.GL_MODELVIEW);

     

      gl.glColor3f (1.0f, 1.0f, 1.0f);

      gl.glBegin(GL.GL_LINES);     

            gl.glVertex2f(0.0f,-300.0f);

            gl.glVertex2f(0.0f,300.0f);

           

            gl.glVertex2f(-300.0f,0.0f);

            gl.glVertex2f(300.0f,0.0f);

       gl.glEnd();     

     

      gl.glLoadIdentity ( );      

      gl.glColor3f (0.0f, 0.0f, 1.0f);

        gl.glRecti (50, 100, 200, 150);     // Display blue rectangle.

 

        gl.glColor3f (1.0f, 0.0f, 0.0f);

      gl.glTranslatef (-200.0f, -150.0f, 0.0f); // Set translation parameters.

      gl.glRecti (50, 100, 200, 150);  // Display red, translated rectangle.

 

      gl.glColor3f (1.0f, 1.0f, 0.0f);

      gl.glLoadIdentity ( );              // Reset current matrix to identity.

      gl.glRotatef (45.0f, 0.0f, 0.0f, 1.0f); // Set 45-deg. rotation about z axis.

      gl.glRecti (50, 100, 200, 150);     // Display yellow, rotated rectangle.

 

      gl.glColor3f (.0f, 1.0f, 0.0f);

      gl.glLoadIdentity ( );            // Reset current matrix to identity.

      gl.glScalef (-0.75f, -1.5f, 1.0f);     // Set scale-reflection parameters.

      gl.glRecti (50, 100, 200, 150);   // Display green, transformed rectangle.

     }

   

   public void init(GLDrawable gLDrawable)

    {

      final GL gl = gLDrawable.getGL();

      final GLU glu = gLDrawable.getGLU();

     

      gl.glMatrixMode (GL.GL_PROJECTION); 

      gl.glClearColor (0.0f, 0.0f, 0.0f, 0.0f);   //set background to white

      glu.gluOrtho2D (-300.0, 300.0, -300, 300.0);  // define drawing area

      gLDrawable.addKeyListener(this);

    }

   

     public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)

    {

    }

   

       public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)

    {

     

    }

 

   

    public void keyPressed(KeyEvent e)

    {

      if (e.getKeyCode() == KeyEvent.VK_ESCAPE)

     

        System.exit(0);

    }

      

    public void keyReleased(KeyEvent e) {}

   

    public void keyTyped(KeyEvent e) {}

      }

 

 

}

 

 

 

OpenGL 3D Rotation

 

 

import java.awt.*;

import java.awt.event.*;

import java.nio.IntBuffer;

 

import net.java.games.jogl.*;

import net.java.games.jogl.util.*;

 

public class GL3DRot

{

 

  static Animator animator = null;

 

  public static void main(String[] args)

  {

    Frame frame = new Frame("OpenGl 3D Rotation ");

    GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());

    canvas.addGLEventListener(new Renderer());

    frame.add(canvas);

    frame.setSize(500, 500);

    animator = new Animator(canvas);

    frame.addWindowListener(new WindowAdapter()

    {

      public void windowClosing(WindowEvent e)

      {

        animator.stop();

        System.exit(0);

      }

    });

    frame.show();

    animator.start();

    canvas.requestFocus();

   

  }

 

 

 

  static class Renderer implements GLEventListener, KeyListener

  {

       

    private float rquad = 0.0f;

    private float rtri = 0.0f;

   

    public void display(GLDrawable gLDrawable)

    {

     final GL gl = gLDrawable.getGL();

     final GLU glu = gLDrawable.getGLU();

   

           

      gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);  // Set display window to color.

        gl.glMatrixMode (GL.GL_MODELVIEW);

     

      gl.glLoadIdentity();

      gl.glRotatef(rtri, 0.0f, 1.0f, 0.0f);

      gl.glBegin(GL.GL_TRIANGLES);        // Drawing Using Triangles

           

        gl.glColor3f(1.0f, 0.0f, 0.0f);   // Set the current drawing color to red

        gl.glVertex3f( 0.0f, 1.0f, 0.0f); // Top

        gl.glColor3f(0.0f, 1.0f, 0.0f);   // Set the current drawing color to green

        gl.glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left

        gl.glColor3f(0.0f, 0.0f, 1.0f);   // Set the current drawing color to blue

        gl.glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right

       

        gl.glColor3f(1.0f, 1.0f, 0.0f);   // Set the current drawing color to yel

        gl.glVertex3f( 0.0f, 1.0f, 0.0f); // Top

        gl.glColor3f(1.0f, 0.0f, 1.0f);   // Set the current drawing color to mag

        gl.glVertex3f(0.0f,-1.0f, -1.0f); // Bottom Left

        gl.glColor3f(0.0f, 1.0f, 1.0f);   // Set the current drawing color to cyan

        gl.glVertex3f( 0.0f,-1.0f, 1.0f); // Bottom Right

        

      gl.glEnd();                   // Finished Drawing The Triangle

       

      gl.glFlush();

      rtri += 0.2f;

     

           

     }

   

   public void init(GLDrawable gLDrawable)

    {

      final GL gl = gLDrawable.getGL();

      final GLU glu = gLDrawable.getGLU();

     

      gl.glMatrixMode (GL.GL_PROJECTION); 

      gl.glClearColor (0.0f, 0.0f, 0.0f, 0.0f);   //set background to white

      gl.glClearDepth(1.0f);                 // Depth Buffer Setup

      gl.glEnable(GL.GL_DEPTH_TEST);            // Enables Depth Testing

      gl.glDepthFunc(GL.GL_LEQUAL);                   // The Type Of Depth Testing To Do

      gl.glOrtho (-2.0, 2.0, -2.0, 2.0, -15.0, 15.0);  // define drawing area

      gLDrawable.addKeyListener(this);

    }

   

     public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, boolean deviceChanged)

    {

    }

   

       public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)

    {

     

    }

 

   

    public void keyPressed(KeyEvent e)

    {

      if (e.getKeyCode() == KeyEvent.VK_ESCAPE)

      animator.stop();

        System.exit(0);

    }

      

    public void keyReleased(KeyEvent e) {}

   

    public void keyTyped(KeyEvent e) {}

      }

 

 

}